#include <QtGui>
#include "massive.h"
#include "card.h"
#include "def.h"
#include "mainwindow.h"
#include <board.h>
#include "brain.h"//класс игрока
MainWindow::MainWindow(QWidget* pwgt) : QWidget(pwgt)
{
	mass = new Massive;
	left = new Brain;
	top = new Brain;
	right = new Brain;
	left_text = new QGraphicsTextItem(QString("left"));
	top_text = new QGraphicsTextItem(QString("Отец"));
	right_text = new QGraphicsTextItem(QString("Антибиотик"));
	number_stroke = 0;
	qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
	qDebug() << QTime(0,0,0).secsTo(QTime::currentTime());
	view = new Board(mix());
	view->setRenderHint(QPainter::Antialiasing, true);
	connect(view, SIGNAL(human_went(Card*)), this, SLOT(went(Card*)));
	//добавляем меню
	QMenuBar* menubar = new QMenuBar;
	//действие Выход
	QAction* exitact = new QAction("&Exit",0);
	connect(exitact, SIGNAL(triggered()), this, SLOT(close()));
	//создать феню Файл и добавить действие Выход
	QMenu* mfile = new QMenu("&File");
	mfile->addAction(exitact);
	menubar->addMenu(mfile);
	//действие раздать
	QAction* dealact = new QAction("&Deal",0);
	connect(dealact, SIGNAL(triggered()), this, SLOT(deal()));
	//создать феню Игра и добавить действие Раздать
	QMenu* mgame =  new QMenu("&Game",0);
	mgame->addAction(dealact);
	menubar->addMenu(mgame);
	//размещаем элементы в окне
	QGridLayout* ptopLayout = new QGridLayout;
	ptopLayout->addWidget(menubar,0,0,1,2);
	ptopLayout->addWidget(view,1,0,1,4);
	score = new QLabel(QString("0"));
	ptopLayout->addWidget(score,2,4);
	setLayout(ptopLayout);
}
QGraphicsScene* MainWindow::mix()
{
// 	mass = new Massive;

//	QList<Card*> top;
//	QList<Card*> right;
	int const_cold[36] = {SIX_CROSSES, SIX_PINOCHELE, SIX_WORM, SIX_BUBI, \
		SEVEN_CROSSES, SEVEN_PINOCHELE, SEVEN_WORM, SEVEN_BUBI, \
		EIGHT_CROSSES, EIGHT_PINOCHELE, EIGHT_WORM, EIGHT_BUBI, \
		NINE_CROSSES, NINE_PINOCHELE, NINE_WORM, NINE_BUBI, \
		TEN_CROSSES, TEN_PINOCHELE, TEN_WORM, TEN_BUBI, \
    		JACK_CROSSES, JACK_PINOCHELE, JACK_WORM, JACK_BUBI, \
		QUEEN_CROSSES, QUEEN_PINOCHELE, QUEEN_WORM, QUEEN_BUBI, \
		KING_CROSSES, KING_PINOCHELE, KING_WORM, KING_BUBI, \
		ACE_CROSSES, ACE_PINOCHELE, ACE_WORM, ACE_BUBI};
	scene = new QGraphicsScene(QRectF(0, 0, 780, 506));	
	scene->addItem(left_text);
	scene->addItem(top_text);
	scene->addItem(right_text);
	left_text->setPos(10,120);
	top_text->setPos(350,10);
	right_text->setPos(700,120);
	
	bool	dim[36];
	int	rand;//,zakl=0;
	for (int i=0; i<36; i++) dim[i]=false;
	//Замешиваем карты
	//здесь ошибка т.к. поменял нумерацию карт (вроди сделал)
	for (int i=0; i<36; i++)
	{
		do
		{
			rand = qrand() % 36;
//			qDebug() << i <<" :\t" << rand << "\t# " << zakl++;
		}
		while (dim[rand] == true);//Если такая карта уже есть, берем ещё одну случайную карту
//		qDebug() << i <<"!OK:\t" << rand;
		dim[rand] = true;
		switch (i % 4)
		{
			case 0 :
			{
				//Первая колода,слева
				mass->add(new Card(const_cold[rand], false));
				scene->addItem(mass->mass[i]);
				mass->mass[i]->setPos(10,150);
				left->push(mass->mass[i]);
				break;
			}
			case 1 :
			{
				//Вторая колода,сверху
				mass->add(new Card(const_cold[rand], false));
				scene->addItem(mass->mass[i]);
				mass->mass[i]->setPos(350,10);
				top->push(mass->mass[i]);
				break;
			}
			case 2 :
			{
				//Третья колода, справа
				mass->add(new Card(const_cold[rand], false));
				scene->addItem(mass->mass[i]);
				mass->mass[i]->setPos(700,150);
				right->push(mass->mass[i]);
				break;
			}
			case 3:
			{
				//Четвертая колода
				mass->add(new Card(const_cold[rand], true));
				scene->addItem(mass->mass[i]);
				mass->mass[i]->setPos(50+((i/4)*80),450);
				human.push_front(mass->mass[i]);
			}
		}
	}
	if (left->jack_crosses_test() != -1)
	{
		trump = left->jack_crosses_test();
	}
	else if (top->jack_crosses_test() != -1)
	{
		trump = top->jack_crosses_test();
	}
	else if (right->jack_crosses_test() != -1)
	{
		trump = right->jack_crosses_test();
	}
	else
	{
//		trump = -1;
		trump = 0;
	}	
//	left1->setCold(&left);
	return scene;
}
void MainWindow::deal()
{
	//удаление старой раздачи(сцены) и содание новой
	delete scene;
	mass->del();
// 	left->del_cold();
// 	top->del_cold();
// 	right->del_cold();
	number_stroke = 0;
	left->card_count = 0;
	top->card_count = 0;
	right->card_count = 0;
	view->setScene(mix());
	view->setRenderHint(QPainter::Antialiasing, true);
}
void MainWindow::went(Card* card)
{
	number_stroke++;
/*	if(number_stroke>1)
	{
		delete table[1];
		delete table[2];
		delete table[3];
		delete table[4];
	}*/
	run(card);
}

void	MainWindow::run(Card* card)
{
		
	if (number_stroke>1)
	{
		table[0]->setPos(2000,2000);
		table[1]->setPos(2000,2000);
		table[2]->setPos(2000,2000);
		table[3]->setPos(2000,2000);
//		delete table[0];
//		delete table[1];
//		delete table[2];
//		delete table[3];	
	}
	//Пока козырь всегда буби
//	Card* table[4];
//	int trump = BUBI;
	table[0] = card;
	table[0]->setPos(350,310);
	
// 	//Ход компьютера (первый противник)
	table[1] = left->brain(table,trump,2);
	table[1]->setPos(260,248);
	view->top(table[1]);
	//Ход компьютера (аппонет)
	table[2] = top->brain(table,trump,3);
	table[2]->setPos(350,190);
	view->top(table[2]);
//	//Ход компьютера (второй противник)
	table[3] = right->brain(table,trump,4);
	table[3]->setPos(440,248);
	view->top(table[3]);

	//подсчет оччков
	score->setNum(table[0]->value+table[1]->value+table[2]->value+table[3]->value);
// 	
// 	qDebug() << score->text();
}
int MainWindow::turn()
{
	//Кто побил??
//	if(	
	return (table[0]->value+table[1]->value+table[2]->value+table[3]->value);
}

void MainWindow::resizeEvent(QResizeEvent* event)
{
//	qDebug() << pos();
	QWidget::resizeEvent(event);
}
